[アップデート] Resource Access Manager が ELB のトラストストアの共有をサポートしたので、別組織のメンバーアカウント間で共有してみた

[アップデート] Resource Access Manager が ELB のトラストストアの共有をサポートしたので、別組織のメンバーアカウント間で共有してみた

Clock Icon2024.07.29

いわさです。

Application Load Balancer では 2023 年の re:Invent の頃より、mTLS をサポートしています。

https://dev.classmethod.jp/articles/mutual-authentication-for-application-load-balancer-trust-store/

mTLS を使う場合にトラストストアを構成することが出来るのですが、私は複数の検証アカウントを使用しており、アカウントや環境が変わるごとに検証用のトラストストアを用意するのがちょっと面倒でした。

そんな中先日の RAM (Resource Access Manager)のアップデートで、この ELB のトラストストアがアカウント間共有出来るようになった気配を感じたので検証してみました。

アップデートアナウンスや Resource Access Manager のドキュメントではまだ確認が出来ないのですが、AWS CLI の v1.33.31 で次の更新を確認しています。

This release adds support for sharing trust stores across accounts and organizations through integration with AWS Resource Access Manager.

https://github.com/aws/aws-cli/commit/b31a3fef4018c0c0f4b628f4705a7a3fe094c7c4

2024.08.06 追記

What's New でもアナウンスされました。

https://aws.amazon.com/about-aws/whats-new/2024/08/elastic-load-balancing-trust-store-cross-account-sharing-aws-resource-access-manager/

RAM で共有する

今回は異なる組織(Organizations)間のメンバーアカウント間で共有を行ってみます。
共有元アカウントでは次のようにトラストストアが既に存在してあります。
ELB のトラストストアの作成方法などについては冒頭の re:Invent アップデートブログをご参照ください。

4D2EEAA9-546E-495E-89C6-1E6C0F441071

RAM で新しいリソース共有を作成します。
リソース共有を作成する際にどのリソースを共有するのか検索して選択していくのですが、今回のアップデートで次のように「ELB Trust Stores」が選択出来るようになっています。

709A410D-16E4-4E95-8F47-3E8553294653

選択するとトラストストアの ARN というか ID が表示されるので、共有したいリソースを選択します。
ID 表示のためにどのトラストストアなのか間違えやすいのでご注意ください。私は間違えました。

5510A254-6054-4B15-873A-B77F495F7A65_4_5005_c

RAM では共有するリソースタイプごとにどのプリンシパルにどういうアクセスを許可するか AWS マネージドポリシーのような形で設定されるのですが、ELB トラストストアの場合は次のような設定内容となっていました。

61471C60-923A-4424-BD7C-6566B0546AD7

今回はこれを別組織の AWS アカウントに共有します。
「すべてのユーザーとの共有を許可」を選択し AWS アカウント ID を入力します。

36366828-E9ED-4F3F-9CC7-A90F73D2DAE2

その後作成を完了させると、共有元 AWS アカウント上では次のように新しいリソース共有が作成されていることが確認出来ます。

4FCB4D2E-7D06-4F63-93DC-B54DE1BE9083

で、こちらを共有先の AWS アカウントで確認してみると、次のように RAM の「自分と共有 - リソースの共有」に保留中の共有が表示されていることが確認出来ると思います。

DBEBB0DB-E5E9-4164-A507-595C11F8E9DE

共有先でこの保留された共有を選択して、承認を行うことでリソース共有が完了し使うことが出来るようになります。

59B66308-EFBE-4E80-B03A-92B9E3AEACE5

リソース共有が承認されると、共有先 AWS アカウント上の「自分と共有 - 共有リソース」で共有されたリソースが確認出来るようになります。
なお、承認されたリソース共有上に追加のリソースを追加した場合は再承認が不要ですぐに共有リソースが使い始めれるようになります。

7E8D55E9-42D3-4144-B228-E7074BD6FBA5

共有されたトラストストアを共有先 AWS アカウントで使ってみる

共有されたトラストストアは自分で作成したリソースと同じように使用することが出来ます。
ELB のトラストストアコンソールを確認してみると、所有者が共有元 AWS アカウントであるトラストストアが追加されていることを確認できました。

9A5E3B77-AD7B-4A24-A664-8101836BE40B

ALB の HTTPS リスナーで mTLS を有効化し、トラストストアで検証するようにしてみましょう。
トラストストアの選択画面で共有されたリソースが選択できました。

E23DA833-6DC6-4B67-B8A8-142A6369B62A

カスタムドメインの名前解決だけしてやり、cURL でアクセスしてみます。

323FDA28-F690-4EED-9B78-23D0B2B05050

# クライアント証明書なし
% curl https://hoge0729.tak1wa.com/
curl: (56) OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 0
# クライアント証明書あり
% curl --key my_client.key --cert myClient.pem https://hoge0729.tak1wa.com/
"Hello from Lambda!"%

選択したトラストストアに紐づいているクライアント証明書を使うことでアクセス出来ることを確認しました。

さいごに

本日は Resource Access Manager が ELB のトラストストアの共有をサポートしたので、別組織のメンバーアカウント間で共有してみました。

AWS CLI の更新履歴のとおり、使うことが出来ましたね。
トラストストアを再利用したい時って結構多い気がするので、なかなか助かるアップデートなのではないでしょうか。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.